#include <jsoncpp/json/json.h> // 在主函数调试 Json 时用的

#include "complier.hpp"
#include "runner.hpp"
#include "compile_run.hpp"
#include "../comm/httplib.h"

int main(int argc,char* argv[])
{
    if(argc!=2)
    {
        std::cerr<<"Usage: " <<std::endl<<'\t'<<argv[0]<<"  port"<<std::endl;
        return 0;
    }
    httplib::Server svr;

    // 注册一个回调方法
    svr.Get("/hello",[](const httplib::Request& _request,httplib::Response &_response){
        // content-type: text/plain   文本类型
                             //  内容纯文本                      第二个参数写文本类型
        _response.set_content("hello httplib,你好 httplib!","text/plain;charset=utf-8");  
    
    });

    svr.Post("/compile_and_run",[](const httplib::Request& _request,httplib::Response &_response){
        
        // _request 请求是从 web 中发送过来的数据,包含了 代码等相关数据
        // 服务请求的正文是我们要的 Json string

        // Get 向服务器 获取相关数据
        // Post 提交信息并返回相关数据
        
        std::string in_json = _request.body;
        std::string out_json;
        
        if(!in_json.empty())
        {
            ns_compile_run::Compile_Run::Start(in_json,&out_json);
            _response.set_content(out_json,"application/json;charset=utf-8");
        }

    });

    // 设置主页
    svr.set_base_dir("./wwwroot"); 

    svr.listen("0.0.0.0",atoi(argv[1]));
}


// test2>>>>>>>>>>>>>>

// Json::Value in_value;

//     // Row 原生字符, R(  )  // 在 R() 内的特殊字符不会被识别, 仅仅只是字符
//     in_value["code"] = R"(
//     #include<iostream>
//     int main()
//     { 
//         while(1)
//         {
//             int *p = new int[10000000000];
//             std::cout<< "Hello linux" << std::endl; 
//         }
//         return 0;  
//     })";

//     in_value["input"] = "";

//     in_value["cpu_limit"] = 1;

//     // 单位是 1kb   这里设置为 20 MB
//     in_value["mem_limit"] = 1024 * 100;

//     Json::FastWriter _writer;
//     std::string _in_json = _writer.write(in_value);

//     std::cout << _in_json << std::endl;

//     std::string _out_json;
//     ns_compile_run::Compile_Run::Start(_in_json, &_out_json);

//     std::cout<<_out_json<<std::endl;

//     return 0;











// test1>>>>>>>>>>>>>>




//  std::string code_filename = "code"; // 可执行程序文件的名字为 code.cpp

//     if (ns_complier::Complier::Compile(code_filename))  // 编译成功再 running
//          ns_runner::Runner::Run(code_filename);
